From: Jeroen van der Heijden Date: Tue, 3 Apr 2018 08:55:29 +0000 (+0200) Subject: Fixing select * series X-Git-Tag: archive/raspbian/2.0.44-1+rpi1~1^2~3^2~9^2~43 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=ad12a39c7bf2ffa7f4a638495553fd6ff8403b7a;p=siridb-server.git Fixing select * series --- diff --git a/src/siri/db/aggregate.c b/src/siri/db/aggregate.c index 25b1f181..5beda188 100644 --- a/src/siri/db/aggregate.c +++ b/src/siri/db/aggregate.c @@ -464,14 +464,15 @@ void siridb_aggregate_list_free(slist_t * alist) */ int siridb_aggregate_can_skip(cleri_children_t * children) { - LOGC("Gid: %d", children->node->children->node->children->node->children->node->cl_obj->gid); - switch (children->node->children->node->children->node->children->node->cl_obj->gid) + cleri_node_t * nd = \ + children->node->children->node->children->node->children->node; + + switch (nd->cl_obj->gid) { case CLERI_GID_F_COUNT: case CLERI_GID_F_FIRST: case CLERI_GID_F_LAST: - return \ - children->node->children->node->children->node->children->node->children->next->next->next == NULL; + return nd->children->next->next->next == NULL; default: return 0; diff --git a/src/siri/db/series.c b/src/siri/db/series.c index 5936f1be..6620217e 100644 --- a/src/siri/db/series.c +++ b/src/siri/db/series.c @@ -812,10 +812,8 @@ siridb_points_t * siridb_series_get_first( points->data->ts = buf->data->ts; points->data->val = buf->data->val; points->len = 1; - LOGC("First from memory"); return points; } - LOGC("First from shard"); (*required_shard)++; @@ -872,12 +870,9 @@ siridb_points_t * siridb_series_get_last( points->data->ts = buf->data->ts; points->data->val = buf->data->val; points->len = 1; - LOGC("Last from memory"); return points; } - LOGC("Last from shard"); - (*required_shard)++; /* if not in the buffer, then if must be in a shard */ @@ -931,7 +926,6 @@ siridb_points_t * siridb_series_get_count(siridb_series_t * series) points->data->val.int64 = series->length; points->len = 1; } - LOGC("Count from memory"); return points; } diff --git a/src/siri/parser/listener.c b/src/siri/parser/listener.c index acdfd314..2affffa3 100644 --- a/src/siri/parser/listener.c +++ b/src/siri/parser/listener.c @@ -202,6 +202,7 @@ static void enter_set_expression(uv_async_t * handle); static void enter_set_ignore_threshold(uv_async_t * handle); static void enter_set_name(uv_async_t * handle); static void enter_set_password(uv_async_t * handle); +static void enter_series_all(uv_async_t * handle); static void enter_series_name(uv_async_t * handle); static void enter_series_match(uv_async_t * handle); static void enter_series_re(uv_async_t * handle); @@ -425,6 +426,7 @@ void siriparser_init_listener(void) siriparser_listen_enter[CLERI_GID_SET_PASSWORD] = enter_set_password; siriparser_listen_enter[CLERI_GID_SERIES_COLUMNS] = enter_xxx_columns; siriparser_listen_enter[CLERI_GID_SERVER_COLUMNS] = enter_xxx_columns; + siriparser_listen_enter[CLERI_GID_SERIES_ALL] = enter_series_all; siriparser_listen_enter[CLERI_GID_SERIES_NAME] = enter_series_name; siriparser_listen_enter[CLERI_GID_SERIES_MATCH] = enter_series_match; siriparser_listen_enter[CLERI_GID_SERIES_RE] = enter_series_re; @@ -1026,7 +1028,6 @@ static void enter_select_stmt(uv_async_t * handle) /* child is always the ',' and child->next the node */ child = query->nodes->node->children->next->node->children; skip_get_points = siridb_aggregate_can_skip(child); - LOGC("Skip?... %d", skip_get_points); child = child->next; while (child != NULL) @@ -1041,7 +1042,6 @@ static void enter_select_stmt(uv_async_t * handle) if (skip_get_points) { - LOGC("Set skip... %d", skip_get_points); q_select->flags |= QUERIES_SKIP_GET_POINTS; } @@ -1322,7 +1322,7 @@ static void enter_series_all(uv_async_t * handle) { siridb_query_t * query = (siridb_query_t *) handle->data; siridb_t * siridb = ((sirinet_socket_t *) query->client->data)->siridb; - cleri_node_t * node = query->nodes->node; + siridb_series_t * series; query_wrapper_t * q_wrapper = (query_wrapper_t *) query->data; /* we must send this query to all pools */ @@ -1332,53 +1332,49 @@ static void enter_series_all(uv_async_t * handle) q_wrapper->pmap = NULL; } - if (q_wrapper->update_cb != NULL) - { - (*q_wrapper->update_cb)( - q_wrapper->series_map, - q_wrapper->series_tmp, - (imap_free_cb) &siridb__series_decref); - } - q_wrapper->series_tmp = NULL; - - uv_mutex_lock(&siridb->series_mutex); - - q_wrapper->slist = imap_2slist_ref( - ( q_wrapper->update_cb == NULL || - q_wrapper->update_cb == &imap_union_ref || - q_wrapper->update_cb == &imap_symmetric_difference_ref) ? - siridb->series_map : q_wrapper->series_map); + uv_mutex_lock(&siridb->series_mutex); - uv_mutex_unlock(&siridb->series_mutex); + q_wrapper->slist = imap_2slist_ref( + ( q_wrapper->update_cb == NULL || + q_wrapper->update_cb == &imap_union_ref || + q_wrapper->update_cb == &imap_symmetric_difference_ref) ? + siridb->series_map : q_wrapper->series_map); - q_wrapper->series_tmp = (q_wrapper->update_cb == NULL) ? - q_wrapper->series_map : imap_new(); + uv_mutex_unlock(&siridb->series_mutex); - if (q_wrapper->slist == NULL || q_wrapper->series_tmp == NULL) - { - MEM_ERR_RET - } + q_wrapper->series_tmp = (q_wrapper->update_cb == NULL) ? + q_wrapper->series_map : imap_new(); - uv_async_t * next = - (uv_async_t *) malloc(sizeof(uv_async_t)); + if (q_wrapper->slist == NULL || q_wrapper->series_tmp == NULL) + { + MEM_ERR_RET + } - if (next == NULL) + for (q_wrapper->slist_index = 0; + q_wrapper->slist_index < q_wrapper->slist->len; + ++q_wrapper->slist_index) + { + series = q_wrapper->slist->data[q_wrapper->slist_index]; + if (imap_add(q_wrapper->series_tmp, series->id, series)) { MEM_ERR_RET } + } - next->data = handle->data; - - uv_async_init( - siri.loop, - next, - (uv_async_cb) async_series_re); - uv_async_send(next); + slist_free(q_wrapper->slist); + q_wrapper->slist = NULL; + q_wrapper->slist_index = 0; - uv_close((uv_handle_t *) handle, (uv_close_cb) free); + if (q_wrapper->update_cb != NULL) + { + (*q_wrapper->update_cb)( + q_wrapper->series_map, + q_wrapper->series_tmp, + (imap_free_cb) &siridb__series_decref); } - /* handle is handled or a signal is raised */ + q_wrapper->series_tmp = NULL; + SIRIPARSER_ASYNC_NEXT_NODE } static void enter_series_re(uv_async_t * handle)